Timer

Mit diesem Funktionsbaustein wird ein kleines Fenster gestartet (amodal) in dem die Uhrzeit angezeigt wird. Die Uhrzeit wird jede Sekunde aktualisiert. Hier wollen wir Ihnen zeigen, wie ein Dynpro regelmäßig aktualisiert werden kann. Dies macht mit der Uhrzeit natürlich wenig Sinn, denn das Aktualisieren des Dynpros kostet viel Systemperformance.


Uhrzeit


ACHTUNG!!!
Diese Variante ist komplett veraltet!!! Sie sollten auf jeden Fall die Klasse CL_GUI_TIMER verwenden!!!


Wenn Sie den Funktionsbaustein wie folgt aufrufen, haben Sie die Uhrzeit in einem separaten unabhängigen Fenster:

CALL FUNCTION ‘Z_UHRZEIT’ STARTING NEW TASK ‘ZUHRZEIT’.

Legen Sie in einer Funktionsgruppe den Funktionsbaustein Z_UHRZEIT an und fügen Sie den untenstehenden Code ein.

Sie müssen noch folgendes tun:

  1. Eintragen der Variablen ins TOP-Include
  2. Anlegen des PF-Status 0100 (Funktionscode BACK auf die Funktionstasten F3, Shift+F3, F12 legen und REFR auf eine beliebiege Taste)
  3. Anlegen des Titels 0100 (Uhrzeit)
  4. Anlegen des Dynpros “0100”:
    – Eintragen Variable OK_CODE in “Elementliste” (Typ OK)
    – Einfügen der Ablauflogik

Variablen TOP-Include (Globale Daten)

FUNCTION-POOL Z_UHR MESSAGE-ID q2.

* Common control definitions
INCLUDE <ctldef>.
* Function module data
DATA: timer_is_initialized VALUE ‘N’.
DATA: h_timer TYPE cntl_handle.
DATA: repid   LIKE sy-repid.
DATA: mapped  LIKE sy-ucomm VALUE ‘REFR’.
DATA: secs    TYPE i        VALUE  2.
DATA: uhrzeit TYPE syuzeit.
DATA: activex(1) VALUE ‘ ‘.
DATA: ok_code LIKE sy-ucomm.
DATA: autoref(20) VALUE ‘active’.
DATA: cuhrzeit(8).

Ablauflogik Dynpro 100

PROCESS BEFORE OUTPUT.
  MODULE auto_refr_init.
  MODULE auto_refr_drill.
  MODULE status_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100 AT EXIT-COMMAND.
  MODULE auto_refr_control.
  MODULE user_command_0100.

Coding

FUNCTION Z_UHRZEIT.

  CALL FUNCTION ‘GUI_HAS_ACTIVEX’
       IMPORTING
            return = activex.

  CALL SCREEN 100 starting at 10 10 ending at 20 10.

ENDFUNCTION.

*———————————————————————-*
FORM init_timer_control.
  IF activex = ‘X’.
    CALL FUNCTION ‘CONTROL_CREATE’
         EXPORTING
              clsid         = ‘Sapgui.InfoCtrl.1’
              shellstyle    = 0
              parentid      = top_window  ” just for testing
              try           = ‘ ‘
              version_check = ‘ ‘
              owner_repid   = repid
              no_flush      = ‘X’
         CHANGING
              h_control     = h_timer.

    CALL FUNCTION ‘CONTROL_REGISTER_EVENT’
         EXPORTING
              h_control = h_timer
              event     = 1
         EXCEPTIONS
              OTHERS    = 1.

    IF sy-subrc = 1.
      MESSAGE e008 WITH ‘UNKNOWN ERROR’ ‘CONTROL_REGISTER_EVENT’.
    ENDIF.


    CALL FUNCTION ‘CONTROL_REGISTER_EVT_CB’
         EXPORTING
              event                   = 1
              callback_prog           = repid
              callback_form           = ‘ON_TIMER’
         CHANGING
              h_control               = h_timer
         EXCEPTIONS
              cb_not_found            = 1
              inv_callback_definition = 2
              OTHERS                  = 3.
    IF sy-subrc = 1.
      MESSAGE e008 WITH ‘cb_not_found’ ‘CONTROL_REGISTER_EVT_CB’.
    ELSEIF sy-subrc = 2.
  MESSAGE e008 WITH ‘inv_callback_definition’ ‘CONTROL_REGISTER_EVT_CB’.
    ELSEIF sy-subrc = 3.
      MESSAGE e008 WITH ‘UNKNOWN_ERROR’ ‘CONTROL_REGISTER_EVT_CB’.
    ENDIF.
    CALL FUNCTION ‘CONTROL_FLUSH’.
  ENDIF.
ENDFORM.                          ” INIT_TIMER_CONTROL


callback on_timer.                                          “#EC CALLED
  ok_code = mapped.
endcallback.


*&———————————————————————*
*&      Module  AUTO_REFR_CONTROL  INPUT
*&———————————————————————*

MODULE auto_refr_control INPUT.

  IF activex = ‘X’.
    CALL FUNCTION ‘CONTROL_DISPATCH’
         EXPORTING
              fcode = ok_code.
  ENDIF.
ENDMODULE.                          ” AUTO_REFR_CONTROL  INPUT

*&———————————————————————*
*&      Module  AUTO_REFR_DRILL  OUTPUT
*&———————————————————————*

MODULE auto_refr_drill OUTPUT.
  IF activex = ‘X’.
    IF autoref = ‘active’.
      PERFORM drill_timer.
    ENDIF.
    CLEAR ok_code.
  ENDIF.
ENDMODULE.                          ” AUTO_REFR_DRILL  OUTPUT

*&———————————————————————*
*&      Form  DRILL_TIMER
*&———————————————————————*

FORM drill_timer.

  IF activex = ‘X’.
    CALL FUNCTION ‘CONTROL_CALL_METHOD’
         EXPORTING
              h_control         = h_timer
              method            = ‘SetTimer’
              p_count           = 1
              p1                = secs
         EXCEPTIONS
              cntl_system_error = 1
              cntl_error        = 2
              OTHERS            = 3.
    IF sy-subrc = 1.
      MESSAGE e008 WITH ‘CNTL_SYSTEM_ERROR’ ‘CONTROL_CALL_METHOD’.
    ELSEIF sy-subrc = 2.
      MESSAGE e008 WITH ‘CNTL_ERROR’ ‘CONTROL_CALL_METHOD’.
    ELSEIF sy-subrc = 3.
      MESSAGE e008 WITH ‘UNKNOWN_ERROR’ ‘CONTROL_CALL_METHOD’.
    ENDIF.
  ENDIF.

ENDFORM.                            ” DRILL_TIMER

*&———————————————————————*
*&      Module  AUTO_REFR_INIT  OUTPUT
*&———————————————————————*

MODULE auto_refr_init OUTPUT.

  IF activex = ‘X’.
    IF timer_is_initialized = ‘N’.
      repid = sy-repid.
      CALL FUNCTION ‘CONTROL_INIT’.
      PERFORM init_timer_control.
      timer_is_initialized = ‘Y’.
      autoref = ‘active’.
    ENDIF.
  ENDIF.

ENDMODULE.                          ” AUTO_REFR_INIT  OUTPUT

*&———————————————————————*
*&      Module  STATUS_0100  OUTPUT
*&———————————————————————*

MODULE status_0100 OUTPUT.

  SET PF-STATUS ‘0100’.
  SET TITLEBAR ‘0100’.
  CLEAR ok_code.
  WRITE uhrzeit TO cuhrzeit.

ENDMODULE.                 ” STATUS_0100  OUTPUT

*&———————————————————————*
*&      Module  USER_COMMAND_0100  INPUT
*&———————————————————————*

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN ‘REFR’.
      uhrzeit = sy-uzeit.
    WHEN ‘BACK’.
      SET SCREEN 0. LEAVE SCREEN.
  ENDCASE.
ENDMODULE.                 ” USER_COMMAND_0100  INPUT

 

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)